﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ServiceSATT;
using ApplicationContext;

namespace UI_SATT
{
    public partial class FrmNuevaSede : Form, IInterfazSede,IListadoClub,IListadoFederacion, IListadoProvincia, IListadoLocalidades, IListadoPais
    {
        string ImplementaSede = "SedeService";
        string ImplementaFederacion = "FederacionService";
        string ImplementaClub = "ClubService";
        string ImplementaUbicacion = "UbicacionService";
        string[][] ListaFederaciones;
        int Idsede;
        String SedeModificar = "";
        ISedeService SedeService;
        IFederacionService FederacionServicio;
        IPaisService PaisServicio;

        public FrmNuevaSede()
        {
            InitializeComponent();
        }

        public FrmNuevaSede(string _Sede)
        {
            InitializeComponent();
            SedeModificar = _Sede;
        }

        private void FrmNuevaSede_Load(object sender, EventArgs e)
        {
            FederacionServicio = (IFederacionService)AppContext.Instance.GetObject(ImplementaFederacion);
            FederacionServicio.ListaFederacion(this);
            PaisServicio = (IPaisService)AppContext.Instance.GetObject(ImplementaUbicacion);
            PaisServicio.Listado(this);
            SedeService = (ISedeService)AppContext.Instance.GetObject(ImplementaSede);
            if (SedeModificar != "")
            {
                SedeService.Buscar(this);
                SedeModificar = "";
                gbDatos.Text = "Modificar";
            }
            else
            {
                ChkEstado.Checked = true;
                gbDatos.Text = "Nueva";
            }
        }

        #region IListadoFederacion Members

        public string[][] Listado
        {
            set 
            {
                if (CboFederacion.Items.Count > 0)
                    CboFederacion.Items.Clear();
                ListaFederaciones = value;
                foreach (string[] valor in value)
                {
                    CboFederacion.Items.Add(valor[0]);
                }
                CboFederacion.SelectedIndex = -1;
            }
        }

        #endregion

        private void CboFederacion_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (CboFederacion.SelectedIndex > -1)
            {
                IClubService club = (IClubService)AppContext.Instance.GetObject(ImplementaClub);
                club.ListaClub(this);
            }
        }

        private void CboListaClubes_SelectedIndexChanged(object sender, EventArgs e)
        {
            TxtNombreSede.Focus();
        }
       
        #region IListadoProvincia Members

        public string Pais
        {
            get { return CboPais.SelectedItem.ToString(); }
        }

        public List<string> LstProvincia
        {
            set 
            { 
                CboProvincia.DataSource = value;
            }
        }

        #endregion

        #region IListadoLocalidades Members

        public string Provincia
        {
            get { return CboProvincia.SelectedItem.ToString(); }
        }

        public List<string> LstLocalidades
        {
            set 
            { 
                CboLocalidad.DataSource = value;
                //CboLocalidad.SelectedIndex = -1;
            }
        }

        #endregion

        private void BtnAceptar_Click(object sender, EventArgs e)
        {
            if (CboFederacion.SelectedIndex > -1 && CboListaClubes.SelectedIndex > -1 &&
                CboPais.SelectedIndex > -1 && CboProvincia.SelectedIndex > -1 && CboLocalidad.SelectedIndex > -1 &&
                TxtCantCanchas.Text != "" && TxtDireccion.Text != "" && TxtTelefonoSede.Text != "")
            {
                if (gbDatos.Text == "Nueva")
                    SedeService.Agregar(this);
                else
                    SedeService.Actualizar(this);
                this.LimpiarCampos();
                this.DialogResult = DialogResult.OK;
                this.Close();
            }
            else
                MessageBox.Show("Complete todos los campos antes de continuar.");
        }
        
        #region IListadoClub Members

        public string NombreFederacion
        {
            get { return CboFederacion.SelectedItem.ToString(); }
        }

        public string[][] LstClub
        {
            set
            {
                if (CboListaClubes.Items.Count > 0)
                    CboListaClubes.Items.Clear();
                foreach (string[] valor in value)
                {
                    CboListaClubes.Items.Add(valor[0]);
                }
                CboListaClubes.SelectedIndex = -1;
            }
        }

        #endregion

        private void BtnCancelar_Click(object sender, EventArgs e)
        {
            this.DialogResult = DialogResult.Cancel;
            this.Close();
        }

        #region Miembros de IInterfazSede

        public int IdSede 
        {
            get
            {
                return Idsede;
            }
            set
            {
                Idsede = value;
            }
        }

        public string Nombre
        {
            get
            {
                if (SedeModificar != "")
                    return SedeModificar;
                else
                    return TxtNombreSede.Text;
            }
            set
            {
                TxtNombreSede.Text = value;
            }
        }

        string IInterfazSede.Pais { set { CboPais.SelectedItem = value; } }

        public string Federacion { set { CboFederacion.SelectedItem = value; } }

        string IInterfazSede.Provincia { set { CboProvincia.SelectedItem = value; } }

        public string Localidad
        {
            get
            {
                return CboLocalidad.SelectedItem.ToString();
            }
            set
            {
                CboLocalidad.SelectedItem = value;
            }
        }

        public string Direccion
        {
            get
            {
                return TxtDireccion.Text;
            }
            set
            {
                TxtDireccion.Text = value;
            }
        }

        public string Telefono
        {
            get
            {
                return TxtTelefonoSede.Text;
            }
            set
            {
                TxtTelefonoSede.Text = value;
            }
        }

        public string Email
        {
            get
            {
                return TxtEmailSede.Text;
            }
            set
            {
                TxtEmailSede.Text = value;
            }
        }

        public int Canchas
        {
            get
            {
                return int.Parse(TxtCantCanchas.Text);
            }
            set
            {
                TxtCantCanchas.Text = value.ToString();
            }
        }

        public string Club
        {
            get
            {
                return CboListaClubes.SelectedItem.ToString();
            }
            set
            {
                CboListaClubes.SelectedItem = value;
            }
        }

        public bool Estado
        {
            get
            {
                return ChkEstado.Checked;
            }
            set
            {
                ChkEstado.Checked = value;
            }
        }
        #endregion

        private void TxtCantCanchas_KeyPress(object sender, KeyPressEventArgs e)
        {
            if (char.IsNumber(e.KeyChar) || e.KeyChar == 8)
                e.Handled = false;
            else
                e.Handled = true;
        }

        #region Miembros de IListadoPais

        public List<string> LstPais
        {
            set 
            {
                CboPais.DataSource = value;
            }
        }

        #endregion

        private void CboPais_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

        private void CboProvincia_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

        private void CboLocalidad_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

        private void CboListaClubes_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

        private void CboFederacion_KeyPress(object sender, KeyPressEventArgs e)
        {
            e.Handled = true;
        }

        private void LimpiarCampos()
        {
            CboFederacion.SelectedIndex = -1;
            CboListaClubes.DataSource = null;
            CboLocalidad.DataSource = null;
            CboProvincia.DataSource = null;
            CboPais.SelectedIndex = -1;
            TxtCantCanchas.Text = "";
            TxtDireccion.Text = "";
            TxtEmailSede.Text = "";
            TxtNombreSede.Text = "";
            TxtTelefonoSede.Text = "";
        }

        private void CboPais_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (CboPais.SelectedIndex > -1)
            {
                IProvinciaService ProvinciaServicio = (IProvinciaService)AppContext.Instance.GetObject(ImplementaUbicacion);
                ProvinciaServicio.Listado(this);
            }
        }

        private void CboProvincia_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (CboPais.SelectedIndex > -1 && CboProvincia.SelectedIndex > -1)
            {
                ILocalidadService localidad = (ILocalidadService)AppContext.Instance.GetObject(ImplementaUbicacion);
                localidad.Listado(this);
            }
        }

        private void FrmNuevaSede_FormClosing(object sender, FormClosingEventArgs e)
        {
            this.Dispose();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Form NuevaLocalidad = new FrmAgregarLocalidades();
            NuevaLocalidad.ShowDialog();
            if (NuevaLocalidad.DialogResult == DialogResult.OK)
            {
                PaisServicio.Listado(this);
                CboPais.SelectedIndex = -1;
                CboProvincia.Text = "";
                CboLocalidad.Text = "";
            }
        }

    }
}
